home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 6: Level 6 / 17 Bit - Level 6 (1998)(Epic Marketing)[!].iso / files / 4089.dms / 4089.adf / FileSelect / FileSelect.asm < prev    next >
Assembly Source File  |  1992-05-14  |  31KB  |  1,592 lines

  1.         opt    a-,c-,d-,l+,ow-,p-,x-
  2.  
  3. * ---------------------------------------------------------------------------
  4. * -----                        FileSelect V2.0                          -----
  5. * -----                     ~~~~~~~~~~~~~~~~~~~~~                       -----
  6. * ----- (c), (w) by André Wichmann of CLUSTER 01/09/1990 - 29/09/1990.  -----
  7. * ---------------------------------------------------------------------------
  8.  
  9. *
  10. * Either use blink to link 'FileSelect.o' to your program or append this
  11. * source at the end of your source and delete the include-lines.
  12. * If you want to change something, use the 'l+' option to make it linkable.
  13. * You may change the incdir-line 'df0:source/' to the path where the
  14. * 'FileSelect.i'-file is.
  15. * Please link this section to CHIPMEM because it includes two images which
  16. * have to be in CHIPMEM (Just do not change the 'SECTION'-line).
  17. *
  18.  
  19.         incdir    ram:include/,df0:source/
  20.         include    exec/exec_lib.i
  21.         include    exec/memory.i
  22.         include    intuition/intuition_lib.i
  23.         include    intuition/intuition.i
  24.         include    intuition/intuitionbase.i
  25.         include    graphics/graphics_lib.i
  26.         include    libraries/dos_lib.i
  27.         include    libraries/dos.i
  28.         include    libraries/dosextens.i
  29.  
  30.         include    FileSelect.i
  31.  
  32.         XDEF    FileSelect
  33.         XREF    _IntuitionBase,_GfxBase,_DOSBase
  34.  
  35.         SECTION    "FileSelect_V2",CODE_C
  36.  
  37. * FileSelect start
  38.  
  39. FileSelect    movem.l    d2-d7/a2-a6,-(sp)
  40.         lea    .Window(pc),a1
  41.         move.w    NFS2_LeftEdge(a0),d0
  42.         cmp.w    #NFS2_CENTREPOS,d0
  43.         bne.s    .No_CentreX
  44.         move.w    #160,d0
  45. .No_CentreX    move.w    d0,nw_LeftEdge(a1)
  46.         move.w    d0,.MDWindow+nw_LeftEdge
  47.         move.w    d0,.RFWindow+nw_LeftEdge
  48.         move.w    d0,.DELWindow+nw_LeftEdge
  49.         move.w    NFS2_TopEdge(a0),d0
  50.         cmp.w    #NFS2_CENTREPOS,d0
  51.         bne.s    .No_CentreY
  52.         move.w    #16,d0
  53. .No_CentreY    move.w    d0,nw_TopEdge(a1)
  54.         add.w    #40,d0
  55.         move.w    d0,.MDWindow+nw_TopEdge
  56.         move.w    d0,.RFWindow+nw_TopEdge
  57.         move.w    d0,.DELWindow+nw_TopEdge
  58.         cmp.l    #NFS2_DEFAULTTITLE,NFS2_WindowTitle(a0)
  59.         beq.s    .DefaultTitle
  60.         move.l    NFS2_WindowTitle(a0),nw_Title(a1)
  61. .DefaultTitle    move.l    NFS2_Screenptr(a0),d0
  62.         cmp.l    #NFS2_ACTIVESCREEN,d0
  63.         bne.s    .OwnScreen
  64.         move.l    _IntuitionBase,a2
  65.         move.l    ib_ActiveScreen(a2),d0
  66. .OwnScreen    move.l    d0,nw_Screen(a1)
  67.         move.l    d0,.MDWindow+nw_Screen
  68.         move.l    d0,.RFWindow+nw_Screen
  69.         move.l    d0,.DELWindow+nw_Screen
  70.         cmp.l    #NFS2_NODEFAULT,NFS2_DefaultPath(a0)
  71.         beq.s    .NoDefPath
  72.         move.l    NFS2_DefaultPath(a0),a1
  73.         lea    .Path(pc),a2
  74. .CopyDefPath    move.b    (a1)+,(a2)+
  75.         cmp.b    #0,-1(a2)
  76.         bne.s    .CopyDefPath
  77. .NoDefPath    cmp.l    #NFS2_NODEFAULT,NFS2_DefaultFile(a0)
  78.         beq.s    .NoDefFile
  79.         move.l    NFS2_DefaultFile(a0),a1
  80.         lea    .File(pc),a2
  81. .CopyDefFile    move.b    (a1)+,(a2)+
  82.         cmp.b    #0,-1(a2)
  83.         bne.s    .CopyDefFile
  84. .NoDefFile    move.b    NFS2_BackPen(a0),d0
  85.         cmp.b    #NFS2_DEFAULTPEN,d0
  86.         bne.s    .NoDefBackPen
  87.         move.b    #1,d0
  88. .NoDefBackPen    move.b    d0,.text0+1
  89.         move.b    d0,.text12+1
  90.         move.b    d0,.text13+1
  91.         move.b    d0,.text14+1
  92.         move.b    d0,.text15+1
  93.         move.b    d0,.text16+1
  94.         move.b    d0,.text17+1
  95.         move.b    d0,.text18+1
  96.         ext.w    d0
  97.         ext.l    d0
  98.         move.l    d0,.BackPen
  99.         move.b    NFS2_FilePen(a0),d0
  100.         cmp.b    #NFS2_DEFAULTPEN,d0
  101.         bne.s    .NoDefFilePen
  102.         move.b    #2,d0
  103. .NoDefFilePen    ext.w    d0
  104.         ext.l    d0
  105.         move.l    d0,.FilePen
  106.         move.b    NFS2_DirPen(a0),d0
  107.         cmp.b    #NFS2_DEFAULTPEN,d0
  108.         bne.s    .NoDefDirPen
  109.         move.b    #3,d0
  110. .NoDefDirPen    ext.w    d0
  111.         ext.l    d0
  112.         move.l    d0,.DirPen
  113.         move.b    NFS2_GadgetPen(a0),d0
  114.         cmp.b    #NFS2_DEFAULTPEN,d0
  115.         bne.s    .NoDefGadPen
  116.         move.b    #2,d0
  117. .NoDefGadPen    move.b    d0,.text0
  118.         move.b    d0,.border0+4
  119.         move.b    d0,.text12
  120.         move.b    d0,.border12+4
  121.         move.b    d0,.text13
  122.         move.b    d0,.border13+4
  123.         move.b    d0,.text14
  124.         move.b    d0,.text15
  125.         move.b    d0,.text16
  126.         move.b    d0,.text17
  127.         move.b    d0,.text18
  128.         ext.w    d0
  129.         ext.l    d0
  130.         move.l    d0,.GadgetPen
  131.         move.w    NFS2_GadgetFlags(a0),.gadgetflags
  132.         move.l    NFS2_FirstFilter(a0),.FirstFilter
  133.         lea    .Window(pc),a0
  134.         CALLINT OpenWindow
  135.         tst.l    d0
  136.         bne.s    .NoError_1
  137.         movem.l    (sp)+,d2-d7/a2-a6
  138.         lea    .Answerstruct(pc),a0
  139.         move.w    #FS2_WINDOWERR,FS2_Status(a0)
  140.         move.l    #FS2_NOPATH,FS2_Path(a0)
  141.         move.l    #FS2_NOFILE,FS2_File(a0)
  142.         move.l    #FS2_NOFULLNAME,FS2_FullName(a0)
  143.         move.l    a0,d0
  144.         rts
  145. .NoError_1    move.l    d0,.Windowptr
  146.         move.l    d0,a0
  147.         move.l    wd_RPort(a0),.rp
  148.  
  149. * Ausfüllen
  150.  
  151.         move.l    .rp,a1
  152.         move.l    .GadgetPen,d0
  153.         CALLGRAF SetAPen
  154.         move.l    #0,d0
  155.         move.l    #10,d1
  156.         move.l    #319,d2
  157.         move.l    #167,d3
  158.         CALLGRAF RectFill
  159.         move.l    .rp,a1
  160.         move.l    .Backpen(pc),d0
  161.         CALLGRAF SetAPen
  162.         move.l    #1,d0
  163.         move.l    #11,d1
  164.         move.l    #318,d2
  165.         move.l    #166,d3
  166.         CALLGRAF RectFill
  167.         move.l    .rp(pc),a1
  168.         move.l    .GadgetPen,d0
  169.         CALLGRAF SetAPen
  170.         move.l    #0,d0
  171.         move.l    #25,d1
  172.         CALLGRAF Move
  173.         move.l    #319,d0
  174.         move.l    #25,d1
  175.         CALLGRAF Draw
  176.         move.l    .rp(pc),a1
  177.         move.l    #0,d0
  178.         move.l    #108,d1
  179.         CALLGRAF Move
  180.         move.l    #319,d0
  181.         move.l    #108,d1
  182.         CALLGRAF Draw
  183.         lea    .gadget0(pc),a0
  184.         move.l    .Windowptr(pc),a1
  185.         sub.l    a2,a2
  186.         CALLINT RefreshGadgets
  187.  
  188. * Gadgets an/aus
  189.  
  190.         lea    .gadget16(pc),a0
  191.         move.l    .Windowptr(pc),a1
  192.         sub.l    a2,a2
  193.         CALLINT OnGadget
  194.         move.w    .GadgetFlags,d0
  195.         and.l    #NFS2_MAKEDIR,d0
  196.         bne.s    .MakedirOn
  197.         lea    .gadget16(pc),a0
  198.         move.l    .Windowptr(pc),a1
  199.         sub.l    a2,a2
  200.         CALLINT OffGadget
  201. .MakedirOn    lea    .gadget17(pc),a0
  202.         move.l    .Windowptr(pc),a1
  203.         sub.l    a2,a2
  204.         CALLINT OnGadget
  205.         move.w    .GadgetFlags,d0
  206.         and.l    #NFS2_DELETE,d0
  207.         bne.s    .DeleteOn
  208.         lea    .gadget17(pc),a0
  209.         move.l    .Windowptr(pc),a1
  210.         sub.l    a2,a2
  211.         CALLINT OffGadget
  212. .DeleteOn    lea    .gadget18(pc),a0
  213.         move.l    .Windowptr(pc),a1
  214.         sub.l    a2,a2
  215.         CALLINT OnGadget
  216.         move.w    .GadgetFlags,d0
  217.         and.l    #NFS2_RENAME,d0
  218.         bne.s    .RenameOn
  219.         lea    .gadget18(pc),a0
  220.         move.l    .Windowptr(pc),a1
  221.         sub.l    a2,a2
  222.         CALLINT OffGadget
  223. .RenameOn    move.l    .rp(pc),a1
  224.         move.l    .Backpen(pc),d0
  225.         CALLGRAF SetBPen
  226.  
  227. * Hauptschleife
  228.  
  229. .ReadPath    tst.l    .Lock
  230.         beq.s    .NoFreeLock
  231.         move.l    .Lock(pc),d1
  232.         CALLDOS UnLock
  233. .NoFreeLock    bsr    .FreeMem
  234.         move.l    #0,.Files
  235.         move.l    #0,.StartPrint
  236.         bsr    .PrintFiles
  237.         bsr    .CorrectProp
  238.         clr.l    .ChangeFlag
  239.         lea    .Path(pc),a0
  240.         move.l    a0,d1
  241.         move.l    #ACCESS_READ,d2
  242.         CALLDOS Lock
  243.         tst.l    d0
  244.         beq    .Bad_Path
  245.         move.l    d0,.Lock
  246.         move.l    .Lock(pc),d1
  247.         lea    .fib(pc),a0
  248.         move.l    a0,d2
  249.         CALLDOS Examine
  250.         lea    .Mem(pc),a5
  251. .ReadLoop    move.l    .Lock(pc),d1
  252.         lea    .fib(pc),a0
  253.         move.l    a0,d2
  254.         CALLDOS ExNext
  255.         tst.l    d0
  256.         beq    .EndRead
  257.         cmp.l    #NFS2_NOFILTER,.FirstFilter
  258.         beq.s    .GetIt
  259.         lea    .fib(pc),a0
  260.         lea    fib_FileName(a0),a0
  261.         move.l    .FirstFilter(pc),a1
  262.         clr.l    d2
  263. .CheckLength    cmp.b    #0,(a0)
  264.         beq.s    .GotLength
  265.         addq.l    #1,d2
  266.         addq.l    #1,a0
  267.         bra.s    .CheckLength
  268. .GotLength
  269. .CheckFilters    move.b    FS2F_FilterLength(a1),d1
  270.         cmp.b    d1,d2
  271.         blt.s    .NextFilter
  272.         move.l    a0,a2
  273.         move.l    FS2F_Filter(a1),a3
  274.         ext.w    d1
  275.         ext.l    d1
  276.         sub.l    d1,a2
  277.         subq    #1,d1
  278. .CmpFilter    move.b    (a2)+,d0
  279.         bsr    .Upcase
  280.         move.b    d0,d3
  281.         move.b    (a3)+,d0
  282.         bsr    .Upcase
  283.         cmp.b    d0,d3
  284.         bne.s    .NextFilter
  285.         dbra    d1,.CmpFilter
  286.         bra.s    .EndOfEx
  287. .NextFilter    move.l    FS2F_NextFilter(a1),a1
  288.         cmp.l    #FS2F_LastFilter,a1
  289.         bne.s    .CheckFilters
  290. .GetIt        move.l    #42,d0
  291.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  292.         CALLEXEC AllocMem
  293.         tst.l    d0
  294.         beq    .Wait_event
  295.         addq.l    #1,.Files
  296.         move.l    #1,.ChangeFlag
  297.         move.l    d0,(a5)
  298.         move.l    d0,a5
  299.         lea    4(a5),a1
  300.         lea    .fib+fib_FileName(pc),a2
  301. .CopyFileName    cmp.b    #0,(a2)
  302.         beq.s    .EndCopyFName
  303.         move.b    (a2)+,(a1)+
  304.         bra.s    .CopyFileName
  305. .EndCopyFName    move.l    .fib+fib_Size(pc),38(a5)
  306.         tst.l    .fib+fib_DirEntryType
  307.         bmi.s    .fibFile
  308.         move.b    #1,37(a5)
  309. .fibFile    bsr    .PrintFiles
  310.         bsr    .CorrectProp
  311. .EndOfEx    move.l    .Windowptr(pc),a0
  312.         move.l    wd_UserPort(a0),a0
  313.         CALLEXEC GetMsg
  314.         tst.l    d0
  315.         beq    .ReadLoop
  316.         move.l    d0,a1
  317.         move.l    im_Class(a1),d6
  318.         move.l    im_IAddress(a1),a4
  319.         CALLEXEC ReplyMsg
  320.         cmp.l    #GADGETUP,d6
  321.         beq.s    .DoGadget1
  322.         cmp.l    #GADGETDOWN,d6
  323.         beq.s    .DoGadget1
  324.         move.l    .Lock,d1
  325.         CALLDOS UnLock
  326.         move.l    #0,.Lock
  327.         bra    .Devices
  328.  
  329. .DoGadget1    move.w    gg_GadgetID(a4),d0
  330.         cmp.w    #0,d0
  331.         beq    .ReadPath
  332.         cmp.w    #8,d0
  333.         ble.s    .R_File
  334.         cmp.w    #9,d0
  335.         beq.s    .R_prop
  336.         cmp.w    #10,d0
  337.         beq.s    .R_Up
  338.         cmp.w    #11,d0
  339.         beq.s    .R_Down
  340.         cmp.w    #12,d0
  341.         beq.s    .R_Okay
  342.         cmp.w    #13,d0
  343.         beq.s    .R_Okay
  344.         cmp.w    #14,d0
  345.         beq.s    .R_Parent
  346.         cmp.w    #15,d0
  347.         beq.s    .R_Cancel
  348.         cmp.w    #16,d0
  349.         beq    .R_Makedir
  350.         cmp.w    #17,d0
  351.         beq    .R_Delete
  352.         cmp.w    #18,d0
  353.         beq    .R_Rename
  354.         bra    .ReadLoop
  355.  
  356. .R_File        bsr    .FileGadget
  357.         cmp.b    #1,d0
  358.         beq    .ReadLoop
  359.         cmp.b    #2,d0
  360.         beq    .End
  361.         bra    .ReadPath
  362. .R_prop        bsr    .sort
  363.         bsr    .prop
  364.         bra    .ReadLoop
  365. .R_Up        bsr    .sort
  366.         bsr    .up
  367.         bra    .ReadLoop
  368. .R_Down        bsr    .sort
  369.         bsr    .down
  370.         bra    .ReadLoop
  371. .R_Okay        move.l    .Lock,d1
  372.         CALLDOS UnLock
  373.         move.l    #0,.Lock
  374.         bra    .Okay
  375. .R_Parent    bsr    .Parent
  376.         bra    .ReadPath
  377. .R_Cancel    move.l    .Lock,d1
  378.         CALLDOS UnLock
  379.         move.l    #0,.Lock
  380.         bra    .Cancel
  381. .R_Makedir    move.l    .Lock,d1
  382.         CALLDOS UnLock
  383.         move.l    #0,.Lock
  384.         bsr    .Makedir
  385.         bra    .ReadPath
  386. .R_Delete    move.l    .Lock,d1
  387.         CALLDOS UnLock
  388.         move.l    #0,.Lock
  389.         bsr    .Delete
  390.         bra    .ReadPath
  391. .R_Rename    move.l    .Lock,d1
  392.         CALLDOS UnLock
  393.         move.l    #0,.Lock
  394.         bsr    .Rename
  395.         bra    .ReadPath
  396.  
  397. .EndRead    move.l    .Lock,d1
  398.         CALLDOS UnLock
  399.         move.l    #0,.Lock
  400.  
  401. .Wait_event    move.l    .Windowptr(pc),a0
  402.         move.l    wd_UserPort(a0),a0
  403.         CALLEXEC GetMsg
  404.         tst.l    d0
  405.         beq.s    .Wait_event
  406.         move.l    d0,a1
  407.         move.l    im_Class(a1),d6
  408.         move.l    im_IAddress(a1),a4
  409.         CALLEXEC ReplyMsg
  410.         cmp.l    #GADGETUP,d6
  411.         beq.s    .DoGadget2
  412.         cmp.l    #GADGETDOWN,d6
  413.         beq.s    .DoGadget2
  414.         bra    .Devices
  415.  
  416. .DoGadget2    move.w    gg_GadgetID(a4),d0
  417.         cmp.w    #0,d0
  418.         beq    .ReadPath
  419.         cmp.w    #8,d0
  420.         ble.s    .E_File
  421.         cmp.w    #9,d0
  422.         beq.s    .E_prop
  423.         cmp.w    #10,d0
  424.         beq.s    .E_Up
  425.         cmp.w    #11,d0
  426.         beq.s    .E_Down
  427.         cmp.w    #12,d0
  428.         beq.s    .E_Okay
  429.         cmp.w    #13,d0
  430.         beq.s    .E_Okay
  431.         cmp.w    #14,d0
  432.         beq.s    .E_Parent
  433.         cmp.w    #15,d0
  434.         beq.s    .E_Cancel
  435.         cmp.w    #16,d0
  436.         beq.s    .E_Makedir
  437.         cmp.w    #17,d0
  438.         beq.s    .E_Delete
  439.         cmp.w    #18,d0
  440.         beq.s    .E_Rename
  441.         bra    .Wait_event
  442.  
  443. .E_File        bsr    .FileGadget
  444.         cmp.b    #1,d0
  445.         beq    .Wait_event
  446.         cmp.b    #2,d0
  447.         beq    .End
  448.         bra    .ReadPath
  449. .E_prop        bsr    .sort
  450.         bsr    .prop
  451.         bra    .Wait_event
  452. .E_Up        bsr    .sort
  453.         bsr    .up
  454.         bra    .Wait_event
  455. .E_Down        bsr    .sort
  456.         bsr    .down
  457.         bra    .Wait_event
  458. .E_Okay        bra    .Okay
  459. .E_Parent    bsr    .Parent
  460.         bra    .ReadPath
  461. .E_Cancel    bra    .Cancel
  462. .E_Makedir    bsr    .Makedir
  463.         bra    .ReadPath
  464. .E_Delete    bsr    .Delete
  465.         bra    .ReadPath
  466. .E_Rename    bsr    .Rename
  467.         bra    .ReadPath
  468.  
  469. .Bad_Path    move.l    .rp(pc),a1
  470.         move.l    .Backpen(pc),d0
  471.         CALLGRAF SetBPen
  472.         move.l    .GadgetPen,d0
  473.         CALLGRAF SetAPen
  474.         move.l    #126,d0
  475.         move.l    #64,d1
  476.         CALLGRAF Move
  477.         lea    .BadPath_text(pc),a0
  478.         move.l    #10,d0
  479.         CALLGRAF Text
  480.         bra    .Wait_event
  481.  
  482. * Ende
  483.  
  484. .end        bsr    .FreeMem
  485.         move.l    .Windowptr(pc),a0
  486.         CALLINT CloseWindow
  487.         movem.l    (sp)+,d2-d7/a2-a6
  488.         lea    .Answerstruct(pc),a0
  489.         move.l    a0,d0
  490.         rts
  491.  
  492. * subroutines
  493.  
  494. .FileGadget    ext.l    d0
  495.         subq.l    #1,d0
  496.         add.l    .StartPrint(pc),d0
  497.         cmp.l    .Files,d0
  498.         blt.s    .FileOkay
  499.         moveq    #1,d0
  500.         rts
  501. .FileOkay    move.l    .Mem(pc),a0
  502.         tst.l    d0
  503.         beq.s    .NoSkip_2
  504.         subq.l    #1,d0
  505. .Skip_2        move.l    (a0),a0
  506.         dbra    d0,.Skip_2
  507. .NoSkip_2    cmp.b    #0,37(a0)
  508.         bne.s    .NoFile_2
  509.         lea    .File(pc),a1
  510.         lea    4(a0),a0
  511.         move.b    #1,d2
  512. .CopyFName_2    move.b    (a0),d0
  513.         cmp.b    (a1),d0
  514.         beq.s    .Equal
  515.         move.b    #0,d2
  516. .Equal        move.b    (a0)+,(a1)+
  517.         cmp.b    #0,-1(a1)
  518.         bne.s    .CopyFName_2
  519.         lea    .gadget0(pc),a0
  520.         move.l    .Windowptr(pc),a1
  521.         sub.l    a2,a2
  522.         CALLINT RefreshGadgets
  523.         moveq    #1,d0
  524.         add.b    d2,d0
  525.         rts
  526. .NoFile_2    cmp.b    #1,37(a0)
  527.         bne.s    .NoDir_2
  528.         lea    .Path(pc),a1
  529. .Search_Zero    cmp.b    #0,(a1)+
  530.         bne.s    .Search_Zero
  531.         subq.l    #1,a1
  532.         cmp.b    #"/",-1(a1)
  533.         beq.s    .No_Pathline
  534.         cmp.b    #":",-1(a1)
  535.         beq.s    .No_Pathline
  536.         move.b    #"/",(a1)+
  537. .No_Pathline    lea    4(a0),a0
  538. .CopyDName_2    move.b    (a0)+,(a1)+
  539.         cmp.b    #0,-1(a1)
  540.         bne.s    .CopyDName_2
  541.         lea    .gadget0(pc),a0
  542.         move.l    .Windowptr(pc),a1
  543.         sub.l    a2,a2
  544.         CALLINT RefreshGadgets
  545.         moveq    #0,d0
  546.         rts
  547. .NoDir_2    lea    .Path(pc),a1
  548.         lea    4(a0),a0
  549. .CopyDevName_2    move.b    (a0)+,(a1)+
  550.         cmp.b    #0,-1(a1)
  551.         bne.s    .CopyDevName_2
  552.         lea    .gadget0(pc),a0
  553.         move.l    .Windowptr(pc),a1
  554.         sub.l    a2,a2
  555.         CALLINT RefreshGadgets
  556.         moveq    #0,d0
  557.         rts
  558.  
  559. .prop        cmp.l    #8,.Files
  560.         ble.s    .NoRefresh
  561.         lea    .Special9(pc),a0
  562.         clr.l    d0
  563.         clr.l    d1
  564.         move.w    4(a0),d0
  565.         move.l    .Files(pc),d1
  566.         sub.l    #8,d1
  567.         mulu    d1,d0
  568.         divu    #$ffff,d0
  569.         and.l    #$ffff,d0
  570.         move.l    d0,.StartPrint
  571.         bsr    .PrintFiles
  572.         move.l    .Windowptr(pc),a0
  573.         move.l    wd_UserPort(a0),a0
  574.         CALLEXEC GetMsg
  575.         tst.l    d0
  576.         beq.s    .prop
  577.         move.l    d0,a1
  578.         CALLEXEC ReplyMsg
  579. .NoRefresh    rts
  580.  
  581. .up        cmp.l    #8,.Files
  582.         bls.s    .NoRefresh
  583.         tst.l    .StartPrint
  584.         beq.s    .NoRefresh
  585.         subq.l    #1,.StartPrint
  586.         bsr    .CorrectProp
  587.         bsr    .PrintFiles
  588.         move.l    .Windowptr(pc),a0
  589.         move.l    wd_UserPort(a0),a0
  590.         CALLEXEC GetMsg
  591.         tst.l    d0
  592.         beq.s    .up
  593.         move.l    d0,a1
  594.         CALLEXEC ReplyMsg
  595.         rts
  596.  
  597. .down        cmp.l    #8,.Files
  598.         bls.s    .NoRefresh
  599.         move.l    .StartPrint,d0
  600.         add.l    #8,d0
  601.         move.l    .Files,d1
  602.         cmp.l    d0,d1
  603.         beq.s    .NoRefresh
  604.         addq.l    #1,.StartPrint
  605.         bsr    .CorrectProp
  606.         bsr    .PrintFiles
  607.         move.l    .Windowptr(pc),a0
  608.         move.l    wd_UserPort(a0),a0
  609.         CALLEXEC GetMsg
  610.         tst.l    d0
  611.         beq.s    .down
  612.         move.l    d0,a1
  613.         CALLEXEC ReplyMsg
  614.         rts
  615.  
  616. .Okay        lea    .AnswerStruct(pc),a0
  617.         move.w    #FS2_OKAY,FS2_Status(a0)
  618.         lea    .Path(pc),a1
  619.         move.l    a1,FS2_Path(a0)
  620.         lea    .File(pc),a1
  621.         move.l    a1,FS2_File(a0)
  622.         lea    .FullName(pc),a2
  623.         move.l    FS2_Path(a0),a1
  624.         move.l    a1,a3
  625. .CreatePath    cmp.b    #0,(a1)
  626.         beq.s    .PathMade
  627.         move.b    (a1)+,(a2)+
  628.         bra.s    .CreatePath
  629. .PathMade    cmp.l    a3,a1
  630.         beq.s    .NoPathline
  631.         cmp.b    #"/",-1(a2)
  632.         beq.s    .NoPathline
  633.         cmp.b    #":",-1(a2)
  634.         beq.s    .NoPathline
  635.         move.b    #"/",(a2)+
  636. .NoPathline    move.l    FS2_File(a0),a1
  637. .CreatePath_2    cmp.b    #0,(a1)
  638.         beq.s    .PathMade_2
  639.         move.b    (a1)+,(a2)+
  640.         bra.s    .CreatePath_2
  641. .PathMade_2    lea    .FullName(pc),a1
  642.         move.l    a1,FS2_FullName(a0)
  643.         bra    .End
  644.  
  645. .Parent        lea    .Path(pc),a0
  646. .GetEnd        cmp.b    #0,(a0)
  647.         beq.s    .GotEnd
  648.         addq.l    #1,a0
  649.         bra.s    .GetEnd
  650. .GotEnd        lea    .Path(pc),a1
  651. .SearchCD    cmp.l    a0,a1
  652.         beq.s    .CDReturn
  653.         cmp.b    #"/",(a0)
  654.         beq.s    .FoundCD
  655.         cmp.b    #":",(a0)
  656.         beq.s    .Found2P
  657.         subq.l    #1,a0
  658.         bra.s    .SearchCD
  659. .FoundCD    move.b    #0,(a0)
  660.         bra.s    .CDReturn
  661. .Found2P    move.b    #0,1(a0)
  662. .CDReturn    lea    .gadget0(pc),a0
  663.         move.l    .Windowptr(pc),a1
  664.         sub.l    a2,a2
  665.         CALLINT RefreshGadgets
  666.         rts
  667.  
  668. .Cancel        lea    .AnswerStruct(pc),a0
  669.         move.w    #FS2_CANCEL,FS2_Status(a0)
  670.         move.l    #FS2_NOPATH,FS2_Path(a0)
  671.         move.l    #FS2_NOFILE,FS2_File(a0)
  672.         move.l    #FS2_NOFULLNAME,FS2_FullName(a0)
  673.         bra    .End
  674.  
  675. .Makedir    lea    .Path(pc),a0
  676.         lea    .MDPath(pc),a1
  677. .CopyMDPath    move.b    (a0)+,(a1)+
  678.         cmp.b    #0,-1(a1)
  679.         bne.s    .CopyMDPath
  680.         lea    .MDWindow(pc),a0
  681.         CALLINT    OpenWindow
  682.         tst.l    d0
  683.         beq    .MDError
  684.         move.l    d0,.Windowptr_2
  685.         move.l    d0,a0
  686.         move.l    wd_RPort(a0),.rp_2
  687.         move.l    .rp_2,a1
  688.         move.l    .GadgetPen(pc),d0
  689.         CALLGRAF SetAPen
  690.         move.l    .rp_2(pc),a1
  691.         move.l    #0,d0
  692.         move.l    #0,d1
  693.         move.l    #319,d2
  694.         move.l    #47,d3
  695.         CALLGRAF RectFill
  696.         move.l    .rp_2(pc),a1
  697.         move.l    .BackPen(pc),d0
  698.         CALLGRAF SetAPen
  699.         move.l    .rp_2(pc),a1
  700.         move.l    #1,d0
  701.         move.l    #1,d1
  702.         move.l    #318,d2
  703.         move.l    #46,d3
  704.         CALLGRAF RectFill
  705.         move.l    .rp_2(pc),a1
  706.         move.l    .GadgetPen(pc),d0
  707.         CALLGRAF SetAPen
  708.         move.l    .rp_2(pc),a1
  709.         move.l    .BackPen(pc),d0
  710.         CALLGRAF SetBPen
  711.         move.l    .rp_2(pc),a1
  712.         move.l    #88,d0
  713.         move.l    #10,d1
  714.         CALLGRAF Move
  715.         lea    .MDText(pc),a0
  716.         move.l    #18,d0
  717.         CALLGRAF Text
  718.         lea    .MDGadget0(pc),a0
  719.         move.l    .Windowptr_2(pc),a1
  720.         sub.l    a2,a2
  721.         CALLINT RefreshGadgets
  722.         lea    .MDGadget0(pc),a0
  723.         move.l    .Windowptr_2(pc),a1
  724.         sub.l    a2,a2
  725.         CALLINT ActivateGadget
  726.  
  727.         bsr    .Event
  728.         move.w    gg_GadgetID(a4),d0
  729.         cmp.w    #2,d0
  730.         beq.s    .NoMD
  731.         move.l    #.MDPath,d1
  732.         CALLDOS CreateDir
  733.         tst.l    d0
  734.         beq.s    .NoMD
  735.         move.l    d0,d1
  736.         CALLDOS UnLock
  737.  
  738. .NoMD        move.l    .Windowptr_2(pc),a0
  739.         CALLINT CloseWindow
  740. .MDError    rts
  741.  
  742. .Delete        lea    .DELWindow(pc),a0
  743.         CALLINT    OpenWindow
  744.         tst.l    d0
  745.         beq    .DELError
  746.         move.l    d0,.Windowptr_2
  747.         move.l    d0,a0
  748.         move.l    wd_RPort(a0),.rp_2
  749.         move.l    .rp_2,a1
  750.         move.l    .GadgetPen(pc),d0
  751.         CALLGRAF SetAPen
  752.         move.l    .rp_2(pc),a1
  753.         move.l    #0,d0
  754.         move.l    #0,d1
  755.         move.l    #319,d2
  756.         move.l    #35,d3
  757.         CALLGRAF RectFill
  758.         move.l    .rp_2(pc),a1
  759.         move.l    .BackPen(pc),d0
  760.         CALLGRAF SetAPen
  761.         move.l    .rp_2(pc),a1
  762.         move.l    #1,d0
  763.         move.l    #1,d1
  764.         move.l    #318,d2
  765.         move.l    #34,d3
  766.         CALLGRAF RectFill
  767.         move.l    .rp_2(pc),a1
  768.         move.l    .GadgetPen(pc),d0
  769.         CALLGRAF SetAPen
  770.         move.l    .rp_2(pc),a1
  771.         move.l    .BackPen(pc),d0
  772.         CALLGRAF SetBPen
  773.         move.l    .rp_2(pc),a1
  774.         move.l    #104,d0
  775.         move.l    #10,d1
  776.         CALLGRAF Move
  777.         lea    .DELText(pc),a0
  778.         move.l    #14,d0
  779.         CALLGRAF Text
  780.         lea    .DELGadget0(pc),a0
  781.         move.l    .Windowptr_2(pc),a1
  782.         sub.l    a2,a2
  783.         CALLINT RefreshGadgets
  784.  
  785.         bsr    .Event
  786.         move.w    gg_GadgetID(a4),d0
  787.         cmp.w    #1,d0
  788.         beq.s    .NoDEL
  789.         lea    .Path(pc),a0
  790.         lea    .RFPath(pc),a1
  791.         move.l    a1,a2
  792. .CopyDELPath    move.b    (a0)+,(a1)+
  793.         cmp.b    #0,-1(a1)
  794.         bne.s    .CopyDELPath
  795.         subq.l    #1,a1
  796.         cmp.l    a1,a2
  797.         beq.s    .DELNoCD
  798.         cmp.b    #"/",-1(a1)
  799.         beq.s    .DELNoCD
  800.         cmp.b    #":",-1(a1)
  801.         beq.s    .DELNoCD
  802.         move.b    #"/",(a1)+
  803. .DELNoCD    lea    .File(pc),a0
  804.         cmp.b    #0,(a0)
  805.         bne.s    .CopyDELName
  806.         cmp.b    #"/",-1(a1)
  807.         bne.s    .CopyDELName
  808.         subq.l    #1,a1
  809. .CopyDELName    move.b    (a0)+,(a1)+
  810.         cmp.b    #0,-1(a1)
  811.         bne.s    .CopyDELName
  812.         move.l    #.RFPath,d1
  813.         CALLDOS DeleteFile
  814.  
  815. .NoDEL        move.l    .Windowptr_2(pc),a0
  816.         CALLINT CloseWindow
  817. .DELError    rts
  818.  
  819. .Rename        lea    .Path(pc),a0
  820.         lea    .RFPath(pc),a1
  821.         move.l    a1,a2
  822. .CopyRFPath    move.b    (a0)+,(a1)+
  823.         cmp.b    #0,-1(a1)
  824.         bne.s    .CopyRFPath
  825.         subq.l    #1,a1
  826.         cmp.l    a1,a2
  827.         beq.s    .RFNoCD
  828.         cmp.b    #"/",-1(a1)
  829.         beq.s    .RFNoCD
  830.         cmp.b    #":",-1(a1)
  831.         beq.s    .RFNoCD
  832.         move.b    #"/",(a1)+
  833. .RFNoCD        lea    .File(pc),a0
  834.         cmp.b    #0,(a0)
  835.         beq    .RFError
  836. .CopyRFName    move.b    (a0)+,(a1)+
  837.         cmp.b    #0,-1(a1)
  838.         bne.s    .CopyRFName
  839.         lea    .RFPath(pc),a0
  840.         lea    .FullName(pc),a1
  841. .SaveOldName    move.b    (a0)+,(a1)+
  842.         cmp.b    #0,-1(a1)
  843.         bne.s    .SaveOldName
  844.         lea    .RFWindow(pc),a0
  845.         CALLINT    OpenWindow
  846.         tst.l    d0
  847.         beq    .RFError
  848.         move.l    d0,.Windowptr_2
  849.         move.l    d0,a0
  850.         move.l    wd_RPort(a0),.rp_2
  851.         move.l    .rp_2,a1
  852.         move.l    .GadgetPen(pc),d0
  853.         CALLGRAF SetAPen
  854.         move.l    .rp_2(pc),a1
  855.         move.l    #0,d0
  856.         move.l    #0,d1
  857.         move.l    #319,d2
  858.         move.l    #47,d3
  859.         CALLGRAF RectFill
  860.         move.l    .rp_2(pc),a1
  861.         move.l    .BackPen(pc),d0
  862.         CALLGRAF SetAPen
  863.         move.l    .rp_2(pc),a1
  864.         move.l    #1,d0
  865.         move.l    #1,d1
  866.         move.l    #318,d2
  867.         move.l    #46,d3
  868.         CALLGRAF RectFill
  869.         move.l    .rp_2(pc),a1
  870.         move.l    .GadgetPen(pc),d0
  871.         CALLGRAF SetAPen
  872.         move.l    .rp_2(pc),a1
  873.         move.l    .BackPen(pc),d0
  874.         CALLGRAF SetBPen
  875.         move.l    .rp_2(pc),a1
  876.         move.l    #72,d0
  877.         move.l    #10,d1
  878.         CALLGRAF Move
  879.         lea    .RFText(pc),a0
  880.         move.l    #22,d0
  881.         CALLGRAF Text
  882.         lea    .RFGadget0(pc),a0
  883.         move.l    .Windowptr_2(pc),a1
  884.         sub.l    a2,a2
  885.         CALLINT RefreshGadgets
  886.         lea    .RFGadget0(pc),a0
  887.         move.l    .Windowptr_2(pc),a1
  888.         sub.l    a2,a2
  889.         CALLINT ActivateGadget
  890.  
  891.         bsr    .Event
  892.         move.w    gg_GadgetID(a4),d0
  893.         cmp.w    #2,d0
  894.         beq.s    .NoRF
  895.         move.l    #.FullName,d1
  896.         move.l    #.RFPath,d2
  897.         CALLDOS Rename
  898.  
  899. .NoRF        move.l    .Windowptr_2(pc),a0
  900.         CALLINT CloseWindow
  901. .RFError    rts
  902.  
  903. .Event        move.l    .Windowptr_2(pc),a0
  904.         move.l    wd_UserPort(a0),a0
  905.         CALLEXEC GetMsg
  906.         tst.l    d0
  907.         beq.s    .Event
  908.         move.l    d0,a1
  909.         move.l    im_Class(a1),d6
  910.         move.l    im_IAddress(a1),a4
  911.         CALLEXEC ReplyMsg
  912.         rts
  913.  
  914. * The routine to get the device-names was taken from the source of the
  915. * Filerequest from 'FileMaster' by Roger Fischlin.It was changed by me
  916. * to fit in this program.Thanks Roger !
  917.  
  918. .Devices    bsr    .FreeMem
  919.         clr.l    .Files
  920.         clr.l    .Mem
  921.         clr.l    .StartPrint
  922.         move.l    _DosBase,a2
  923.         move.l    dl_Root(a2),a2
  924.         move.l    rn_Info(a2),a2
  925.         add.l    a2,a2
  926.         add.l    a2,a2
  927.         move.l    di_DevInfo(a2),a2
  928.         add.l    a2,a2
  929.         add.l    a2,a2
  930.         lea    .Mem(pc),a5
  931. .Devs1        cmp.l    #DLT_DEVICE,dl_Type(a2)
  932.         bne.s    .Devs2
  933.         tst.l    dl_Task(a2)
  934.         beq.s    .Devs2    
  935.         movem.l    d1-d7/a0-a6,-(sp)
  936.         move.l    #42,d0
  937.         move.l    #0,d1
  938.         CALLEXEC AllocMem
  939.         movem.l    (sp)+,d1-d7/a0-a6
  940.         addq.l    #1,.Files
  941.         move.l    d0,(a5)
  942.         move.l    d0,a5
  943.         move.l    d0,a0
  944.         clr.l    (a0)+
  945.         clr.l    d0
  946.         move.l    dl_Name(a2),a1
  947.         add.l    a1,a1
  948.         add.l    a1,a1
  949.         move.b    (a1)+,d0
  950.         subq.l    #1,d0
  951. .CopyDevsname    move.b    (a1)+,(a0)+
  952.         dbra    d0,.CopyDevsname
  953.         move.b    #":",(a0)+
  954.         clr.b    (a0)
  955.         move.b    #2,37(a5)
  956.         move.l    #0,38(a5)
  957. .Devs2        move.l    (a2),a2
  958.         add.l    a2,a2
  959.         add.l    a2,a2
  960.         cmp.l    #0,a2
  961.         bne.s    .Devs1
  962.         bsr    .CorrectProp
  963.         bsr.s    .Sort
  964.         bsr    .PrintFiles
  965.         bra    .Wait_Event
  966.  
  967. .Sort        tst.l    .ChangeFlag
  968.         bne.s    .DoSort
  969.         rts
  970. .DoSort        clr.l    .ChangeFlag
  971.         cmp.l    #1,.Files
  972.         bls    .NoSort
  973.         move.l    .Mem(pc),a0
  974. .Sort_1        move.l    (a0),a1
  975.         cmp.l    #0,a1
  976.         beq.s    .SortFinished
  977. .Sort_2        lea    4(a0),a2
  978.         lea    4(a1),a3
  979. .Compare_1    cmp.b    #0,(a3)
  980.         beq.s    .NoSwap_1
  981.         move.b    (a3)+,d0
  982.         bsr    .Upcase
  983.         move.b    d0,d1
  984.         move.b    (a2)+,d0
  985.         bsr    .Upcase
  986.         cmp.b    d0,d1
  987.         beq.s    .Compare_1
  988.         blt.s    .NoSwap_1
  989.         lea    4(a0),a2
  990.         lea    4(a1),a3
  991.         moveq    #37,d0
  992. .Swap_1        move.b    (a3),d1
  993.         move.b    (a2),(a3)+
  994.         move.b    d1,(a2)+
  995.         dbra    d0,.Swap_1
  996. .NoSwap_1    move.l    (a1),a1
  997.         cmp.l    #0,a1
  998.         bne.s    .Sort_2
  999.         move.l    (a0),a0
  1000.         cmp.l    #0,a0
  1001.         bne.s    .Sort_1
  1002. .SortFinished    move.l    .Mem(pc),a0
  1003. .Sort_3        move.l    (a0),a1
  1004.         cmp.l    #0,a1
  1005.         beq.s    .SortFinished_2
  1006. .Sort_4        move.b    37(a0),d0
  1007.         move.b    37(a1),d1
  1008.         cmp.b    d1,d0
  1009.         blt.s    .NoSwap_2
  1010.         lea    4(a0),a2
  1011.         lea    4(a1),a3
  1012.         moveq    #37,d0
  1013. .Swap_2        move.b    (a3),d1
  1014.         move.b    (a2),(a3)+
  1015.         move.b    d1,(a2)+
  1016.         dbra    d0,.Swap_2
  1017. .NoSwap_2    move.l    (a1),a1
  1018.         cmp.l    #0,a1
  1019.         bne.s    .Sort_4
  1020.         move.l    (a0),a0
  1021.         cmp.l    #0,a0
  1022.         bne.s    .Sort_3
  1023. .SortFinished_2    bsr.s    .PrintFiles
  1024. .NoSort        rts
  1025.  
  1026. .FreeMem    tst.l    .Files
  1027.         beq.s    .EndFree
  1028.         move.l    .Mem(pc),a5
  1029. .FreeElement    move.l    a5,a1
  1030.         move.l    (a5),a5
  1031.         move.l    #42,d0
  1032.         CALLEXEC FreeMem
  1033.         cmp.l    #0,a5
  1034.         bne.s    .FreeElement
  1035.         move.l    #0,.Files
  1036.         move.l    #0,.Mem
  1037. .EndFree    rts
  1038.  
  1039. .Upcase        cmp.b    #"a",d0
  1040.         blt.s    .NoUpcase
  1041.         cmp.b    #"z",d0
  1042.         bgt.s    .NoUpcase
  1043.         sub.b    #32,d0
  1044. .NoUpcase    rts
  1045.  
  1046. .PrintFiles    move.l    .Mem(pc),a4
  1047.         move.l    .StartPrint(pc),d0
  1048.         beq.s    .NoSkip
  1049.         subq.l    #1,d0
  1050. .Skip        move.l    (a4),a4
  1051.         dbra    d0,.Skip
  1052. .NoSkip        move.l    #34,d7
  1053.         moveq    #7,d6
  1054. .Printloop    cmp.l    #0,a4
  1055.         beq    .EndPrint
  1056.         lea    .PrintBuffer(pc),a0
  1057.         lea    4(a4),a1
  1058.         moveq    #28,d2
  1059. .CopyName    cmp.b    #0,(a1)
  1060.         beq.s    .EndNCopy
  1061.         move.b    (a1)+,(a0)+
  1062.         dbra    d2,.CopyName
  1063.         bra.s    .NoBlankFill
  1064. .EndNCopy    move.b    #" ",(a0)+
  1065.         dbra    d2,.EndNCopy
  1066. .NoBlankFill    move.b    #" ",(a0)+
  1067.         cmp.b    #0,37(a4)
  1068.         bne.s    .NoFile
  1069.         tst.l    38(a4)
  1070.         bne.s    .NotEmpty
  1071.         move.b    #" ",(a0)+
  1072.         move.b    #"E",(a0)+
  1073.         move.b    #"M",(a0)+
  1074.         move.b    #"P",(a0)+
  1075.         move.b    #"T",(a0)+
  1076.         move.b    #"Y",(a0)+
  1077.         move.b    #" ",(a0)+
  1078.         bra.s    .FileCol
  1079. .NotEmpty    move.b    #" ",(a0)+
  1080.         move.l    38(a4),d2
  1081.         moveq    #0,d3
  1082.         moveq    #5,d0
  1083.         lea    .pot(pc),a1
  1084. .next        moveq    #"0",d1
  1085. .dec        addq    #1,d1
  1086.         sub.l    (a1),d2
  1087.         bcc.s    .dec
  1088.         subq    #1,d1
  1089.         add.l    (a1),d2
  1090.         tst.b    d3
  1091.         bne.s    .ZeroSet
  1092.         cmp.b    #"0",d1
  1093.         bne.s    .ZeroSet
  1094.         move.b    #" ",d1
  1095. .ZeroSet    move.b    d1,(a0)+
  1096.         cmp.b    #" ",d1
  1097.         beq.s    .Space
  1098.         moveq    #1,d3
  1099. .Space        lea    4(a1),a1
  1100.         dbra    d0,.next
  1101. .FileCol    move.l    .rp(pc),a1
  1102.         move.l    .Filepen,d0
  1103.         CALLGRAF SetAPen
  1104.         bra.s    .Out
  1105. .NoFile        cmp.b    #1,37(a4)
  1106.         bne.s    .NoDir
  1107.         move.b    #"»",(a0)+
  1108.         move.b    #" ",(a0)+
  1109.         move.b    #"D",(a0)+
  1110.         move.b    #"I",(a0)+
  1111.         move.b    #"R",(a0)+
  1112.         move.b    #" ",(a0)+
  1113.         move.b    #"«",(a0)+
  1114.         move.l    .rp(pc),a1
  1115.         move.l    .DirPen,d0
  1116.         CALLGRAF SetAPen
  1117.         bra.s    .Out
  1118. .NoDir        move.b    #"»",(a0)+
  1119.         move.b    #" ",(a0)+
  1120.         move.b    #"D",(a0)+
  1121.         move.b    #"E",(a0)+
  1122.         move.b    #"V",(a0)+
  1123.         move.b    #" ",(a0)+
  1124.         move.b    #"«",(a0)+
  1125.         move.l    .rp(pc),a1
  1126.         move.l    .DirPen,d0
  1127.         CALLGRAF SetAPen
  1128. .Out        move.l    #22,d0
  1129.         move.l    d7,d1
  1130.         CALLGRAF Move
  1131.         lea    .PrintBuffer(pc),a0
  1132.         move.l    #37,d0
  1133.         CALLGRAF Text
  1134.         add.l    #10,d7
  1135.         move.l    (a4),a4
  1136.         dbra    d6,.PrintLoop
  1137.         rts
  1138. .EndPrint    lea    .PrintBuffer(pc),a0
  1139.         moveq    #36,d0
  1140. .FillBlanks    move.b    #" ",(a0)+
  1141.         dbra    d0,.FillBlanks
  1142. .ClearRest    move.l    .rp(pc),a1
  1143.         move.l    #22,d0
  1144.         move.l    d7,d1
  1145.         CALLGRAF Move
  1146.         lea    .PrintBuffer(pc),a0
  1147.         move.l    #37,d0
  1148.         CALLGRAF Text
  1149.         add.l    #10,d7
  1150.         dbra    d6,.ClearRest
  1151.         rts
  1152.  
  1153. .CorrectProp    lea    .gadget9(pc),a0
  1154.         move.l    .Windowptr(pc),a1
  1155.         sub.l    a2,a2
  1156.         move.l    #AUTOKNOB!FREEVERT,d0
  1157.         clr.l    d1
  1158.         clr.l    d3
  1159.         move.l    .Files(pc),d2
  1160.         cmp.l    #8,d2
  1161.         bgt.s    .More8
  1162.         moveq.l    #1,d2
  1163. .More8        move.l    #$ffff*8,d4
  1164.         divu    d2,d4
  1165.         and.l    #$ffff,d4
  1166.         move.l    .Files(pc),d5
  1167.         subq.l    #8,d5
  1168.         tst.l    d5
  1169.         bmi.s    .Less8
  1170.         bne.s    .More8_2
  1171. .Less8        moveq.l    #1,d5
  1172. .More8_2    move.l    #$ffff,d2
  1173.         divu    d5,d2
  1174.         and.l    #$ffff,d2
  1175.         move.l    .StartPrint(pc),d5
  1176.         mulu    d2,d5
  1177.         move.l    d5,d2
  1178.         CALLINT    ModifyProp
  1179.         rts
  1180.  
  1181. * structs
  1182.  
  1183. .Window        dc.w    0,0,320,168
  1184.         dc.b    -1,-1
  1185.         dc.l    GADGETUP!GADGETDOWN!MENUVERIFY
  1186.         dc.l    WINDOWDRAG!SMART_REFRESH!ACTIVATE
  1187.         dc.l    .gadget0
  1188.         dc.l    0
  1189.         dc.l    .Windowtitle
  1190.         dc.l    0
  1191.         dc.l    0
  1192.         dc.w    0,0,0,0
  1193.         dc.w    CUSTOMSCREEN
  1194.  
  1195. * Path gadget
  1196.  
  1197. .gadget0    dc.l    .gadget1
  1198.         dc.w    49,14,264,8
  1199.         dc.w    GADGHCOMP,RELVERIFY,STRGADGET
  1200.         dc.l    .border0,0,.text0,0,.info0
  1201.         dc.w    0
  1202.         dc.l    0
  1203. .border0    dc.w    0,0
  1204.         dc.b    2,0,RP_JAM1,5
  1205.         dc.l    .dots0,0
  1206. .dots0        dc.w    -1,-1
  1207.         dc.w    264,-1
  1208.         dc.w    264,8
  1209.         dc.w    -1,8
  1210.         dc.w    -1,-1
  1211. .text0        dc.b    2,1,RP_JAM1,0
  1212.         dc.w    -44,0
  1213.         dc.l    0,.string0,0
  1214. .string0    dc.b    "Path:",0
  1215.         even
  1216. .info0        dc.l    .Path,0
  1217.         dc.w    0,255,0,0,0,0,0,0
  1218.         dc.l    0,0,0
  1219. .Path        ds.b    256
  1220.  
  1221. * Filegadgets
  1222.  
  1223. .gadget1    dc.l    .gadget2
  1224.         dc.w    22,27,296,10
  1225.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1226.         dc.l    0,0,0,0,0
  1227.         dc.w    1
  1228.         dc.l    0
  1229. .gadget2    dc.l    .gadget3
  1230.         dc.w    22,37,296,10
  1231.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1232.         dc.l    0,0,0,0,0
  1233.         dc.w    2
  1234.         dc.l    0
  1235. .gadget3    dc.l    .gadget4
  1236.         dc.w    22,47,296,10
  1237.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1238.         dc.l    0,0,0,0,0
  1239.         dc.w    3
  1240.         dc.l    0
  1241. .gadget4    dc.l    .gadget5
  1242.         dc.w    22,57,296,10
  1243.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1244.         dc.l    0,0,0,0,0
  1245.         dc.w    4
  1246.         dc.l    0
  1247. .gadget5    dc.l    .gadget6
  1248.         dc.w    22,67,296,10
  1249.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1250.         dc.l    0,0,0,0,0
  1251.         dc.w    5
  1252.         dc.l    0
  1253. .gadget6    dc.l    .gadget7
  1254.         dc.w    22,77,296,10
  1255.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1256.         dc.l    0,0,0,0,0
  1257.         dc.w    6
  1258.         dc.l    0
  1259. .gadget7    dc.l    .gadget8
  1260.         dc.w    22,87,296,10
  1261.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1262.         dc.l    0,0,0,0,0
  1263.         dc.w    7
  1264.         dc.l    0
  1265. .gadget8    dc.l    .gadget9
  1266.         dc.w    22,97,296,10
  1267.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1268.         dc.l    0,0,0,0,0
  1269.         dc.w    8
  1270.         dc.l    0
  1271.  
  1272. * Prop-gadget
  1273.  
  1274. .gadget9    dc.l    .gadget10
  1275.         dc.w    2,35,20,64
  1276.         dc.w    GADGHCOMP,RELVERIFY!GADGIMMEDIATE,PROPGADGET
  1277.         dc.l    .SpecialBuf9,0,0,0,.Special9
  1278.         dc.w    9
  1279.         dc.l    0
  1280. .SpecialBuf9    dc.w    0,0,0,0
  1281. .Special9    dc.w    AUTOKNOB!FREEVERT
  1282.         dc.w    0,0,0,$ffff,0,0,0,0,0,0
  1283.  
  1284. * Gadgets up'n'down
  1285.  
  1286. .gadget10    dc.l    .gadget11
  1287.         dc.w    4,27,16,8
  1288.         dc.w    GADGHCOMP!GADGIMAGE,RELVERIFY!GADGIMMEDIATE,BOOLGADGET
  1289.         dc.l    .image10,0,0,0,0
  1290.         dc.w    10
  1291.         dc.l    0
  1292. .image10    dc.w    0,0,16,8,1
  1293.         dc.l    .body10
  1294.         dc.b    1,0
  1295.         dc.l    0
  1296.  
  1297. .gadget11    dc.l    .gadget12
  1298.         dc.w    4,99,16,8
  1299.         dc.w    GADGHCOMP!GADGIMAGE,RELVERIFY!GADGIMMEDIATE,BOOLGADGET
  1300.         dc.l    .image11,0,0,0,0
  1301.         dc.w    11
  1302.         dc.l    0
  1303. .image11    dc.w    0,0,16,8,1
  1304.         dc.l    .body11
  1305.         dc.b    1,0
  1306.         dc.l    0
  1307.  
  1308. * File gadget
  1309.  
  1310. .gadget12    dc.l    .gadget13
  1311.         dc.w    51,112,264,8
  1312.         dc.w    GADGHCOMP,RELVERIFY,STRGADGET
  1313.         dc.l    .border12,0,.text12,0,.info12
  1314.         dc.w    12
  1315.         dc.l    0
  1316. .border12    dc.w    0,0
  1317.         dc.b    2,0,RP_JAM1,5
  1318.         dc.l    .dots12,0
  1319. .dots12        dc.w    -1,-1
  1320.         dc.w    264,-1
  1321.         dc.w    264,8
  1322.         dc.w    -1,8
  1323.         dc.w    -1,-1
  1324. .text12        dc.b    2,1,RP_JAM1,0
  1325.         dc.w    -44,0
  1326.         dc.l    0,.string12,0
  1327. .string12    dc.b    "File:",0
  1328.         even
  1329. .info12        dc.l    .File,0
  1330.         dc.w    0,34,0,0,0,0,0,0
  1331.         dc.l    0,0,0
  1332. .File        ds.b    34
  1333.  
  1334. * Boolgadgets
  1335.  
  1336. .gadget13    dc.l    .gadget14
  1337.         dc.w    32,125,64,16
  1338.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1339.         dc.l    .border13,0,.text13,0,0
  1340.         dc.w    13
  1341.         dc.l    0
  1342. .border13    dc.w    0,0
  1343.         dc.b    2,0,RP_JAM1,5
  1344.         dc.l    .dots13,0
  1345. .dots13        dc.w    0,0
  1346.         dc.w    63,0
  1347.         dc.w    63,16
  1348.         dc.w    0,16
  1349.         dc.w    0,0
  1350. .text13        dc.b    2,1,RP_JAM1,0
  1351.         dc.w    8,5
  1352.         dc.l    0,.string13,0
  1353. .string13    dc.b    " OKAY ",0
  1354.         even
  1355.  
  1356. .gadget14    dc.l    .gadget15
  1357.         dc.w    128,125,64,16
  1358.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1359.         dc.l    .border13,0,.text14,0,0
  1360.         dc.w    14
  1361.         dc.l    0
  1362. .text14        dc.b    2,1,RP_JAM1,0
  1363.         dc.w    8,5
  1364.         dc.l    0,.string14,0
  1365. .string14    dc.b    "PARENT",0
  1366.         even
  1367.  
  1368. .gadget15    dc.l    .gadget16
  1369.         dc.w    226,125,64,16
  1370.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1371.         dc.l    .border13,0,.text15,0,0
  1372.         dc.w    15
  1373.         dc.l    0
  1374. .text15        dc.b    2,1,RP_JAM1,0
  1375.         dc.w    8,5
  1376.         dc.l    0,.string15,0
  1377. .string15    dc.b    "CANCEL",0
  1378.         even
  1379.  
  1380. .gadget16    dc.l    .gadget17
  1381.         dc.w    32,146,64,16
  1382.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1383.         dc.l    .border13,0,.text16,0,0
  1384.         dc.w    16
  1385.         dc.l    0
  1386. .text16        dc.b    2,1,RP_JAM1,0
  1387.         dc.w    4,5
  1388.         dc.l    0,.string16,0
  1389. .string16    dc.b    "MAKEDIR",0
  1390.         even
  1391.  
  1392. .gadget17    dc.l    .gadget18
  1393.         dc.w    128,146,64,16
  1394.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1395.         dc.l    .border13,0,.text17,0,0
  1396.         dc.w    17
  1397.         dc.l    0
  1398. .text17        dc.b    2,1,RP_JAM1,0
  1399.         dc.w    8,5
  1400.         dc.l    0,.string17,0
  1401. .string17    dc.b    "DELETE",0
  1402.         even
  1403.  
  1404. .gadget18    dc.l    0
  1405.         dc.w    226,146,64,16
  1406.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1407.         dc.l    .border13,0,.text18,0,0
  1408.         dc.w    18
  1409.         dc.l    0
  1410. .text18        dc.b    2,1,RP_JAM1,0
  1411.         dc.w    8,5
  1412.         dc.l    0,.string18,0
  1413. .string18    dc.b    "RENAME",0
  1414.         even
  1415.  
  1416. * Makedir window
  1417.  
  1418. .MDWindow    dc.w    0,0,320,48
  1419.         dc.b    -1,-1
  1420.         dc.l    GADGETUP!GADGETDOWN
  1421.         dc.l    SMART_REFRESH!ACTIVATE!BORDERLESS
  1422.         dc.l    .MDgadget0
  1423.         dc.l    0,0,0,0
  1424.         dc.w    0,0,0,0
  1425.         dc.w    CUSTOMSCREEN
  1426.  
  1427. * Makedir gadget
  1428.  
  1429. .MDgadget0    dc.l    .MDgadget1
  1430.         dc.w    49,16,264,8
  1431.         dc.w    GADGHCOMP,RELVERIFY,STRGADGET
  1432.         dc.l    .border0,0,.text0,0,.MDInfo0
  1433.         dc.w    0
  1434.         dc.l    0
  1435. .MDinfo0    dc.l    .MDPath,0
  1436.         dc.w    0,255,0,0,0,0,0,0
  1437.         dc.l    0,0,0
  1438. .MDPath        ds.b    256
  1439.  
  1440. * Okay & Cancel gadget
  1441.  
  1442. .MDgadget1    dc.l    .MDgadget2
  1443.         dc.w    48,28,64,16
  1444.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1445.         dc.l    .border13,0,.text13,0,0
  1446.         dc.w    1
  1447.         dc.l    0
  1448.  
  1449. .MDgadget2    dc.l    0
  1450.         dc.w    210,28,64,16
  1451.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1452.         dc.l    .border13,0,.text15,0,0
  1453.         dc.w    2
  1454.         dc.l    0
  1455.  
  1456. * Rename window
  1457.  
  1458. .RFWindow    dc.w    0,0,320,48
  1459.         dc.b    -1,-1
  1460.         dc.l    GADGETUP!GADGETDOWN
  1461.         dc.l    SMART_REFRESH!ACTIVATE!BORDERLESS
  1462.         dc.l    .RFgadget0
  1463.         dc.l    0,0,0,0
  1464.         dc.w    0,0,0,0
  1465.         dc.w    CUSTOMSCREEN
  1466.  
  1467. * New name gadget
  1468.  
  1469. .RFgadget0    dc.l    .RFgadget1
  1470.         dc.w    49,16,264,8
  1471.         dc.w    GADGHCOMP,RELVERIFY,STRGADGET
  1472.         dc.l    .border12,0,.text12,0,.RFInfo0
  1473.         dc.w    0
  1474.         dc.l    0
  1475. .RFinfo0    dc.l    .RFPath,0
  1476.         dc.w    0,33,0,0,0,0,0,0
  1477.         dc.l    0,0,0
  1478. .RFPath        ds.b    512
  1479.  
  1480. * Okay & Cancel gadget
  1481.  
  1482. .RFgadget1    dc.l    .RFgadget2
  1483.         dc.w    48,28,64,16
  1484.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1485.         dc.l    .border13,0,.text13,0,0
  1486.         dc.w    1
  1487.         dc.l    0
  1488.  
  1489. .RFgadget2    dc.l    0
  1490.         dc.w    210,28,64,16
  1491.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1492.         dc.l    .border13,0,.text15,0,0
  1493.         dc.w    2
  1494.         dc.l    0
  1495.  
  1496. * Delete window
  1497.  
  1498. .DELWindow    dc.w    0,0,320,36
  1499.         dc.b    -1,-1
  1500.         dc.l    GADGETUP!GADGETDOWN
  1501.         dc.l    SMART_REFRESH!ACTIVATE!BORDERLESS
  1502.         dc.l    .DELgadget0
  1503.         dc.l    0,0,0,0
  1504.         dc.w    0,0,0,0
  1505.         dc.w    CUSTOMSCREEN
  1506.  
  1507. * Okay & Cancel gadget
  1508.  
  1509. .DELgadget0    dc.l    .DELgadget1
  1510.         dc.w    48,16,64,16
  1511.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1512.         dc.l    .border13,0,.text13,0,0
  1513.         dc.w    0
  1514.         dc.l    0
  1515.  
  1516. .DELgadget1    dc.l    0
  1517.         dc.w    210,16,64,16
  1518.         dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  1519.         dc.l    .border13,0,.text15,0,0
  1520.         dc.w    1
  1521.         dc.l    0
  1522.  
  1523. * strings
  1524.  
  1525. .Windowtitle    dc.b    "FileSelect V2.0 © by A.Wichmann/CLUSTER",0
  1526.         even
  1527. .BadPath_text    dc.b    "Bad Path !"
  1528.         even
  1529. .MDText        dc.b    "Please enter path:"
  1530.         even
  1531. .RFText        dc.b    "Please enter new name:"
  1532.         even
  1533. .DELText    dc.b    "Are you sure ?"
  1534.         even
  1535.  
  1536. * Tabellen
  1537.  
  1538. .pot        dc.l    100000
  1539.         dc.l    10000
  1540.         dc.l    1000
  1541.         dc.l    100
  1542.         dc.l    10
  1543.         dc.l    1
  1544.  
  1545. * vars
  1546.  
  1547. .Windowptr    ds.l    1
  1548. .rp        ds.l    1
  1549. .GadgetFlags    ds.w    1
  1550. .StartPrint    ds.l    1
  1551. .Files        ds.l    1
  1552. .Mem        ds.l    1
  1553. .Lock        ds.l    1
  1554.         cnop    0,4
  1555. .fib        ds.b    260
  1556. .PrintBuffer    ds.b    38
  1557. .ChangeFlag    ds.l    1
  1558. .Backpen    ds.l    1
  1559. .Filepen    ds.l    1
  1560. .Dirpen        ds.l    1
  1561. .Gadgetpen    ds.l    1
  1562. .FirstFilter    ds.l    1
  1563. .FullName    ds.b    512
  1564. .AnswerStruct    ds.b    FS2_SIZEOF
  1565. .Windowptr_2    ds.l    1
  1566. .rp_2        ds.l    1
  1567.  
  1568. * CHIPMEM-Images
  1569.  
  1570. .body10        dc.w    %0000000000000000
  1571.         dc.w    %0000000110000000
  1572.         dc.w    %0000001111000000
  1573.         dc.w    %0000011111100000
  1574.         dc.w    %0000111111110000
  1575.         dc.w    %0001111111111000
  1576.         dc.w    %0011111111111100
  1577.         dc.w    %0000000000000000
  1578.  
  1579. .body11        dc.w    %0000000000000000
  1580.         dc.w    %0011111111111100
  1581.         dc.w    %0001111111111000
  1582.         dc.w    %0000111111110000
  1583.         dc.w    %0000011111100000
  1584.         dc.w    %0000001111000000
  1585.         dc.w    %0000000110000000
  1586.         dc.w    %0000000000000000
  1587.  
  1588. *
  1589. * Aragorn/CLUSTER rules...
  1590. *
  1591.  
  1592.